package data.scripts.campaign.event.bars;

import com.fs.starfarer.api.Global;
import com.fs.starfarer.api.campaign.*;
import com.fs.starfarer.api.campaign.econ.MarketAPI;
import com.fs.starfarer.api.characters.FullName.Gender;
import com.fs.starfarer.api.characters.PersonAPI;
import com.fs.starfarer.api.impl.campaign.DebugFlags;
import com.fs.starfarer.api.impl.campaign.ids.Factions;
import com.fs.starfarer.api.impl.campaign.ids.Ranks;
import com.fs.starfarer.api.impl.campaign.intel.bar.events.BarEventManager;
import com.fs.starfarer.api.impl.campaign.intel.bar.events.BaseBarEventWithPerson;
import com.fs.starfarer.api.impl.campaign.procgen.themes.MiscellaneousThemeGenerator;
import com.fs.starfarer.api.impl.campaign.rulecmd.AddRemoveCommodity;
import com.fs.starfarer.api.util.WeightedRandomPicker;
import data.scripts.campaign.intel.SF_FaxIntel;
//import data.scripts.utils.AL.I18nUtils.I18nSection;
import java.awt.Color;


public class SF_FaxBarEvent extends BaseBarEventWithPerson {


    public  SF_FaxBarEvent(){
    }

    public static PlanetAPI getTargetPlanet() {
        return (PlanetAPI) Global.getSector().getMemoryWithoutUpdate().get(MiscellaneousThemeGenerator.PLANETARY_SHIELD_PLANET_KEY);
    }

    public boolean shouldShowAtMarket(MarketAPI market){
        if(!super.shouldShowAtMarket(market)){
            return false;
        } else {
        return Global.getSettings().isDevMode() ? true : true;
        }

        if (getTargetPlanet() == null) return false;

        if (Global.getSector().getPlayerStats().getLevel() < 10 && !DebugFlags.BAR_DEBUG) return false;

        return true;

    }

    protected PersonAPI FAX;
    protected MarketAPI PiratesMarket = null;

    public void regen(MarketAPI market) {
        if (this.market != market) {
            super.regen(market);
        }
        if (person.getGender() == Gender.MALE) {
            person.setPortraitSprite(Global.getSettings().getSpriteName("intel", "old_spacer_male"));
        } else {
            person.setPortraitSprite(Global.getSettings().getSpriteName("intel", "old_spacer_female"));
        }

        FAX = Global.getSector().getFaction(Factions.PIRATES).createRandomPerson(random);
        FAX.setRankId(Ranks.PILOT);
        FAX.setPostId(Ranks.POST_CITIZEN);


        WeightedRandomPicker<MarketAPI> picker = new WeightedRandomPicker<MarketAPI>(random);
        for (MarketAPI curr : Global.getSector().getEconomy().getMarketsInGroup(null)) {
            if (curr == market) continue;
            if (curr.isPlayerOwned()) continue;
            if (curr.isHidden()) continue;
            if (curr.getStabilityValue() <= 0) continue;

            float w = curr.getSize();
            if (curr.isFreePort()) w += 10f;
            picker.add(curr, w);
        }

        if (picker.isEmpty()) picker.add(market, 1f);

        PiratesMarket = picker.pick();

    }

    public void addPromptAndOption(InteractionDialogAPI dialog) {
        super.addPromptAndOption(dialog);
        this.regen(dialog.getInteractionTarget().getMarket());
        TextPanelAPI text = dialog.getTextPanel();
        text.addPara("酒吧的墙边有一张残破的海报，上面依稀可以认出《海盗王的盛邀》，即使是星历这种古式风格的海报依旧具有迷人般的美感。");
        Color c = new Color(255, 0, 0);
        dialog.getOptionPanel().addOption("上前查看海报", this, c, (String)null);
    }

    public void init(InteractionDialogAPI dialog) {
        super.init(dialog);
        this.done = false;
        dialog.getVisualPanel().showPersonInfo(this.person, true);
        this.optionSelected((String)null, SF_FaxBarEvent.OptionId.S1);
    }

    public void optionSelected(String optionText, Object optionData) {
        if (optionData instanceof SF_FaxBarEvent.OptionId) {
            SF_FaxBarEvent.OptionId option = (SF_FaxBarEvent.OptionId)optionData;
            OptionPanelAPI options = this.dialog.getOptionPanel();
            TextPanelAPI text = this.dialog.getTextPanel();
            options.clearOptions();
            CargoAPI cargo = Global.getSector().getPlayerFleet().getCargo();
            switch(option) {
                case S1:
                    text.addPara("S1");
                    options.addOption("下一步S2", SF_FaxBarEvent.OptionId.S2);
                    break;
                case S2:
                    text.addPara("S2");
                    options.addOption("下一步S3", SF_FaxBarEvent.OptionId.S3);
                    options.addOption("离开", SF_FaxBarEvent.OptionId.LEAVE);
                    break;
                case S3:
                    text.addPara("3");
                    boolean hasSkills = false;
                    if (cargo.getCredits().get() > 1000000.0F) {
                        hasSkills = true;
                    }
                    options.addOption("没有技能", SF_FaxBarEvent.OptionId.S5);
                    options.addOption("[存在技能]有技能", SF_FaxBarEvent.OptionId.S5);
                    options.setEnabled(SF_FaxBarEvent.OptionId.S5, hasSkills);
                    options.addOption("就连超空间的空洞都容不下这邪门的东西，我不干了", SF_FaxBarEvent.OptionId.LEAVE);
                    break;
                case S4:
                    BarEventManager.getInstance().notifyWasInteractedWith(this);
                   // cargo.addSpecial(new SpecialItemData("AL_lockbox", (String)null), 1.0F);
                    text.addPara("S4";
                    options.addOption("让我们去找一个海盗去询问", SF_FaxBarEvent.OptionId.LEAVE);
                    SF_FaxIntel intel = new AL_LockBoxIntel();
                    if (!intel.isDone()) {
                        Global.getSector().getIntelManager().addIntel(intel, false, text);
                    }
                    break;
                case S5:
                    BarEventManager.getInstance().notifyWasInteractedWith(this);
                   // cargo.addSpecial(new SpecialItemData("AL_lockbox", (String)null), 1.0F);
                    text.addPara("S5");
                    options.addOption("离开", SF_FaxBarEvent.OptionId.LEAVE);
                    SF_FaxIntel intel = new AL_LockBoxIntel();
                    if (!intel.isDone()) {
                        Global.getSector().getIntelManager().addIntel(intel, false, text);
                    }
                    break;




                case LEAVE:
                    this.noContinue = true;
                    this.done = true;
            }

        }
    }

    protected String getPersonFaction() {
        return "independent";
    }

    protected String getPersonRank() {
        return Ranks.SPACE_SAILOR;
    }

    protected String getPersonPost() {
        return Ranks.CITIZEN;
    }

    protected String getPersonPortrait() {
        return null;
    }

    protected Gender getPersonGender() {
        return Gender.MALE;
    }

    public static enum OptionId {
        S1,
        S2,
        S3,
        S4,
        S5,
        LEAVE;

        private OptionId() {
        }
    }



}
